
function logged(value, context) {
  console.log(value)
  console.log(context)
  if (context.kind === 'accessor') {
    const { get, set } = value // 获取原始的 get 和 set
    return { // 返回一个对象 用于重写自动访问器逻辑
      get() { // 装饰器装饰自动访问器属性时 重写 get
        console.log('accessor 自动访问器 get')
        return get.call(this)
      },
      set(val) { // 装饰器装饰自动访问器属性时 重写 set
        console.log('accessor 自动访问器 set')
        return set.call(this, val)
      },
      init(initiaValue) { // 装饰器装饰自动访问器属性时 初始化值由 init 函数返回值来决定
        console.log('accesspr 自动访问器装饰器初始化值 init')
        return initiaValue + 1
      }
    }
  }
}

// accessor 自动访问器 会自动给属性添加 getter 和 setter 访问器
// accessor 自动访问器会将属性变成一个私有属性

class C {
  @logged accessor x = 1 // 自动访问器
}

const c = new C()

console.log(c.x)

c.x = 5

console.log(c.x)

export { } // 让这个ts文件成为一个模块